﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Noris.Tools.TraceVisualiser.Support;

namespace Noris.Tools.TraceDownloader
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(params string[] args)
        {
            Steward.AppInit(args);
            Steward.RunGUI(typeof(Downloader.GrabTraceForm));
            Steward.AppDone();
        }
		#region Povolení ke spouštění, Help mode, EnableStandalone
		/// <summary>
		/// Zjistí, zda je možno aplikaci spustit (buď je předán patřičný parametr, anebo je v Win registru uložena patřičná hodnota).
		/// </summary>
		/// <returns></returns>
		public static bool RunEnabled()
		{
			if (Steward.ParamGet(new string[] { "???", "/???" }, false) != null)
			{
				Dialog.ShowInfo(@" Parametry aplikace:
???    tento help
RunFromTraceAnalyser   Povolí spuštění aplikace
EnableStandalone           Umožní následovné spouštění aplikace jako samostatného procesu (zapíše do registru povolení)
DisableStandalone          Odebere povolení pro spouštění aplikace jako samostatného procesu
TAP=soubor                   Otevře projekt TraceAnalyzeru
soubor.csv                      Zobrazí daný soubor CSV
soubor.hegtv                  Otevře daný projekt TraceVisualiseru.
soubor.hegta                  Otevře projekt TraceAnalyzator v prostředí TraceVisualiseru");
				return false;
			}

			// V parametrech je klíčové slovo pro spouštění aplikace:
            bool isStartedFromTA = (Steward.ParamGet(_RUN_SEM_KEY, false) == _RUN_SEM_VALUE);
            Steward.IsStartedFromTA = isStartedFromTA;
            if (isStartedFromTA)
            {
                Steward.PrepareStartFromTA();
                return true;
            }

			string winReg = WinReg.ReadString(_RUN_WINREG_FOLDER, _RUN_WINREG_KEY, "");
			bool isWinReg  = !string.IsNullOrEmpty(winReg) && winReg == _RUN_WINREG_VALUE;

			// V parametrech je klíčové slovo pro odebrání z registru:
			if (Steward.ParamGet(_RUN_WINREG_DISABLE, false) != null)
			{
				if (isWinReg)
					WinReg.DeleteValue(_RUN_WINREG_FOLDER, _RUN_WINREG_KEY);
				Dialog.ShowInfo("Aplikace TraceVisualiser je odebrána z registru.");
				return false;
			}

			// V registru Win je povoleno samostatné spouštění aplikace:
			if (isWinReg)
				return true;

			// V parametrech je vyžádán zápis povolení do registru:
			if (Steward.ParamGet(_RUN_WINREG_STORE, false) != null)
			{	// V parametrech je slovo pro zaregistrování aplikace do WinReg:
				if (!isWinReg)
					WinReg.WriteString(_RUN_WINREG_FOLDER, _RUN_WINREG_KEY, _RUN_WINREG_VALUE);
				Dialog.ShowInfo("Aplikace TraceVisualiser je povolena z registru.");
				return true;
			}

			Dialog.ShowInfo("Aplikaci TraceVisualiser není možno spouštět přímo. Ke spuštění použijte prosím nástroj TraceAnalyzer.");

			return false;
		}
        private const string _RUN_SEM_KEY = "/LIC";
        private const string _RUN_SEM_VALUE = "B56A1BC91D9B45FAB71E73DB91710667";
		private const string _RUN_WINREG_STORE = "EnableStandalone";
		private const string _RUN_WINREG_DISABLE = "DisableStandalone";
		private const string _RUN_WINREG_FOLDER = "Run";
		private const string _RUN_WINREG_KEY = "EnabledStandalone";
		private const string _RUN_WINREG_VALUE = "true";
		#endregion
		/// <summary>
        /// Verze programu
        /// </summary>
        public static string Version { get { return "1.08.20"; } }
    }
}
